import axios from 'axios'
import { message } from 'ant-design-vue'
import applyCaseMiddleware from 'axios-case-converter'

// API基础配置
export const API_BASE_URL = 'http://localhost:8088/api'

// 创建axios实例
export const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 100000,
  withCredentials: true, // 支持cookie
})

// 图片风格重绘专用
export const styleReGenClient = applyCaseMiddleware(
  axios.create({
    baseURL: API_BASE_URL,
    timeout: 100000,
    withCredentials: true, // 支持cookie
  }),
)

// 请求拦截器
apiClient.interceptors.request.use(
  (config) => {
    // 可以在这里添加token等认证信息
    return config
  },
  (error) => {
    return Promise.reject(error)
  },
)

// 响应拦截器
apiClient.interceptors.response.use(
  (response) => {
    const { data } = response
    // 统一处理业务错误
    if (data.code !== 200) {
      // 检查是否是登录相关错误
      if (
        data.message &&
        (data.message.includes('未登录') || data.message.includes('登录') || data.code === 40100)
      ) {
        console.log('检测到登录失效，清除用户状态')
        // 清除登录状态
        import('@/stores/user').then(({ useUserStore }) => {
          const userStore = useUserStore()
          userStore.clearUser()
        })
      } else {
        message.error(data.message || '请求失败')
      }
      return Promise.reject(new Error(data.message || '请求失败'))
    }
    return data
  },
  (error) => {
    // 处理HTTP错误
    if (error.response?.status === 401) {
      message.error('登录已过期，请重新登录')
      // 清除登录状态并跳转到登录页
      // 这里需要在运行时获取store，避免循环依赖
      import('@/stores/user').then(({ useUserStore }) => {
        const userStore = useUserStore()
        userStore.clearUser()
        // 跳转到登录页
        window.location.href = '/login'
      })
    } else if (error.response?.status === 403) {
      message.error('权限不足')
    } else if (error.response?.status >= 500) {
      message.error('服务器错误')
    } else {
      message.error(error.message || '网络错误')
    }
    return Promise.reject(error)
  },
)
